using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Marlimer.Common;
using Marlimer.Logical.Almacen;
using Marlimer.Common.Entidades;

namespace Marlimer.Logistico.Mantenimientos
{
    public partial class frm_Marca : Form
    {
        lalm_Marca lalm_marca = new lalm_Marca();
        List<itemsGrilla> itemsGrid = new List<itemsGrilla>(); 

        public frm_Marca()
        {
            InitializeComponent();
        }

        private void frm_UnidadMedida_Load(object sender, EventArgs e)
        {
            itemsGrid.Add(new itemsGrilla("ccod_marca", "Codigo", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            itemsGrid.Add(new itemsGrilla("cdes_marca", "Descripcion", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            itemsGrid.Add(new itemsGrilla("cstatus", "Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            this.Location = new Point(0, 0);
            configurarRejilla();
            refreshRejilla(""); 
        }

        private void refreshRejilla(String cdes_marca)
        {
            int flg_anulados = 0;
            if (chkAnulados.Checked)
            {
                flg_anulados = 1;
            }

            gridResultados.DataSource = null;
            //ConfigurarRejilla();
            DataTable dt = lalm_marca.consultaMarca(cdes_marca, flg_anulados);
            if (dt != null)
            {
                gridResultados.DataSource = dt;
                Util.setRejillaColumns(gridResultados, itemsGrid);
            }
        }

        private void configurarRejilla()
        {
            gridResultados.Columns.Clear();
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Codigo", 50, true, true, DataGridViewContentAlignment.MiddleRight));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Descripcion", 200, true, true, DataGridViewContentAlignment.MiddleLeft));
            gridResultados.Columns.Add(Util.createDataGridTextColumn("Estado", 45, true, true, DataGridViewContentAlignment.MiddleCenter));

            gridResultados.AllowUserToResizeRows = false;
            gridResultados.RowHeadersVisible = false;
            gridResultados.AllowUserToAddRows = false;
            gridResultados.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        }

        private void txtGeneralNombres_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.KeyChar = Convert.ToChar(e.KeyChar.ToString().ToUpper());
            e.Handled = Util.validaTecla(e.KeyChar, "Direccion", ((TextBox)sender).Text, true);
        }

        private void txtGeneralSelect_Enter(object sender, EventArgs e)
        {
            Util.selectAllText(((TextBox)sender));
        }

        private void genComandos_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            //segun el tag se realiza la accion
            String com = e.ClickedItem.Tag.ToString();
            switch (com)
            {
                case "N":       //nuevo
                    {
                        nuevo();
                        break;
                    }
                case "G":
                    {
                        if (validarCampos())
                        {
                            guardar();
                        }
                        break;
                    }
                case "A":
                    {
                        if (anular(Convert.ToInt32(txtCodMarca.Text)))
                        {
                            backState();
                        }
                        break;
                    }
                case "B":
                    {
                        buscar();
                        break;
                    }
            }
        }

        private void buscar()
        {
            refreshRejilla(txtDescripcion.Text);    
        }

        private void guardar()
        {
            //verificamos si desea guardar para poder anular la guardada
            DialogResult resp = MessageBox.Show("Seguro que desea guardar el registro?", this.Text, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);

            switch (resp)
            {

                case DialogResult.Yes:
                    {
                        InfoMarca marca = new InfoMarca();

                        //verificamos si es actualizar
                        if (Util.ToValor(txtCodMarca.Text) == 0)
                        {
                            marca.cmodo = 1;  //nuevo
                        }
                        else
                        {
                            marca.cmodo = 2;   //actualizar
                        }

                        marca.cdes_marca = txtDescripcion.Text;
                        marca.cstatus = "";
                        marca.ccod_marca = Convert.ToInt32(Util.ToValor(txtCodMarca.Text));

                        resulMsgError resul = lalm_marca.guardar(marca);

                        if (resul.resul)
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                            backState();
                        }
                        else
                        {
                            MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                        break;
                    }
                case DialogResult.Cancel:
                    {
                        backState();
                        break; 
                    }

            }
        }

        private void backState()
        {
            txtCodMarca.Text = "";
            txtDescripcion.Text = "";
            
            gridResultados.Enabled = true;
            chkAnulados.Enabled = true; 

            tlbAnular.Enabled = false;
            tlbGuardar.Enabled = false;
            tlbNuevo.Enabled = true;
            tlbBuscar.Enabled = true; 

            mnuAnular.Enabled = false;
            mnuGuardar.Enabled = false;
            mnuNuevo.Enabled = true;
            mnuBuscar.Enabled = true;
            lblMensaje.Visible = false;
            lblStatus.Visible = false; 
            refreshRejilla("");
            panDetalles.Enabled = true;
        }

        private Boolean anular(int ccod_marca)
        {
            InfoMarca marca = new InfoMarca();

            marca.ccod_marca = ccod_marca;
            marca.cdes_marca = "";
            //verificar si ya ha sido anulado
            if (lblStatus.Text == "ANULADO")
            {
                if (MessageBox.Show("El registro ya se encuentra anulado, desea activarlo?", this.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
                {
                    marca.cstatus = "A";
                    marca.cmodo = 3;
                    resulMsgError resul = lalm_marca.guardar(marca);
                    if (resul.resul)
                    {
                        MessageBox.Show("Registro activado satisfactoriamente", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                        return resul.resul;
                    }
                    else
                    {
                        MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return resul.resul;
                    }
                }
                else
                {
                    return false;
                }
            }
            else
            {
                marca.cstatus = "D";
                marca.cmodo = 3;
                resulMsgError resul = lalm_marca.guardar(marca);
                if (resul.resul)
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return resul.resul;
                }
                else
                {
                    MessageBox.Show(resul.message, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return resul.resul;
                }
            }
        }

        private void nuevo()
        {
            gridResultados.Enabled = false;
            chkAnulados.Enabled = false;

            tlbGuardar.Enabled = true;
            tlbAnular.Enabled = false;
            mnuGuardar.Enabled = true;
            mnuAnular.Enabled = false;

            tlbNuevo.Enabled = false;
            mnuNuevo.Enabled = false;
            tlbBuscar.Enabled = false;
            mnuBuscar.Enabled = false;
 
            txtDescripcion.Text = "";
            txtCodMarca.Text = "";
            lblStatus.Visible = false;
            lblMensaje.Visible = true;  
            //Util.readOnlyInForm(panDetalles, true);
        }

        private bool validarCampos()
        {
            String msj = "";
            Boolean resul = true;
            //verificamos que cada campo tenga un valor 
            if (txtDescripcion.Text.Trim() == "" && msj == "")
            {
                msj = "Ingrese la descripcion de la marca";
            }

            //si el msj tiene un contenido
            if (msj != "")
            {
                resul = false;
                MessageBox.Show(msj, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            return resul;
        }


        private void gridResultados_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            //validar el formato para anulados
            if (Convert.ToString(gridResultados.Rows[e.RowIndex].Cells["cstatus"].Value) == "D")
            {
                gridResultados.Rows[e.RowIndex].DefaultCellStyle.ForeColor = System.Drawing.Color.Red;
            }
        }

        private void gridResultados_DoubleClick(object sender, EventArgs e)
        {
            //validar de que este una fila seleccionada para el doble click
            if (gridResultados.CurrentRow != null)
            {
                txtCodMarca.Text = Convert.ToString(gridResultados.CurrentRow.Cells["ccod_marca"].Value);
                txtDescripcion.Text = Convert.ToString(gridResultados.CurrentRow.Cells["cdes_marca"].Value);
                String cstatus = Convert.ToString(gridResultados.CurrentRow.Cells["cstatus"].Value);
                lblStatus.Visible = true;
                gridResultados.Enabled = false;
                //activar el modo edicion // activar guardar// desactivar grilla //activar anular
                if (cstatus == "A")     //activo
                {
                    tlbGuardar.Enabled = true;
                    mnuGuardar.Enabled = true;
                    lblStatus.Text = "ACTIVO";
                    lblStatus.ForeColor = System.Drawing.Color.Blue;
                }
                else
                {
                    lblStatus.Text = "ANULADO";
                    lblStatus.ForeColor = System.Drawing.Color.Red;
                    panDetalles.Enabled = false;
                    txtCodMarca.Focus();  
                }
               
                tlbAnular.Enabled = true;
                mnuAnular.Enabled = true;
                tlbNuevo.Enabled = false;
                mnuNuevo.Enabled = false;
                tlbBuscar.Enabled = false;
                mnuBuscar.Enabled = false; 
 
                
                lblMensaje.Visible = true; 
                //Util.readOnlyInForm(panDetalles, false);
            }
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            if (lblMensaje.Visible)
            {
                backState(); 
            }
        }

        private void chkAnulados_CheckedChanged(object sender, EventArgs e)
        {
            buscar(); 
        }


    }
}